// keyof的定义：生成一个类型的所有属性名组成的联合类型。
// in 关键字在 in keyof 结构中扮演了一个 “遍历联合类型成员” 的角色。
// in keyof 是 映射类型（Mapped Types） 中的语法，用于遍历某个类型的所有键（属性名），并根据这些键生成新的类型。
interface Customer { name: string; age: number; phone: number }
type CustKeyValsType = {
  [P in keyof Customer]: Customer[P]
}

// 等价与
type CustKeyValsType2 = {
  [P in "name" | "age" | "phone"]: Customer[P]
}

// ### keyof看不到属性名的问题
// TypeScript 在显示复杂映射类型时，默认保留类型别名。
type Obj = { name: string, age: number }
type TypeA = keyof Obj  // type TypeA = keyof Obj

// 当使用条件类型时，TypeScript可能更积极地展开映射类型，而不是保留类型别名。
type DirectKeys<T> = T extends any ? T : never
type TypeB = DirectKeys<keyof Obj>  // type TypeB = "name" | "age"

// 写一个通用的，你传什么接口，我就解析什么

export {}